from rest_framework.viewsets import ModelViewSet
from rest_framework.generics import ListAPIView
from goods.models import SKU, GoodsCategory, SPU, SPUSpecification
from meiduo_admin.serializers.sku_serializers import SKUSerializer
from meiduo_admin.serializers.sku_serializers import GoodsCategorySerializer, SPUSimpleSerializer, SPUSpecificationSerializer
from meiduo_admin.utils import MyPagination


class SKUGoodsView(ModelViewSet):
    """ sku表数据 增删改查 """

    queryset = SKU.objects.all()
    # 指定使用的序列化器
    serializer_class = SKUSerializer
    # 指定分页器
    pagination_class = MyPagination

    # 重写get_queryset方法，根据前端是否传递keyword值返回不同查询结果
    def get_queryset(self):
        # 获取前端传递的查询字符串参数，统一转化为小写
        keyword = self.request.query_params.get("keyword")
        if keyword:
            # 如果有关键字参数，则使用模糊查询，忽略大小写
            # contains大小写敏感；icontains大小写不敏感
            return self.queryset.filter(name__icontains=keyword.lower()).order_by("id")
        else:
            # 如果关键字参数为空，则显示所有用户
            return self.queryset.all().order_by("id")


class SKUCategorieView(ListAPIView):
    """ 获取sku的第三级分类信息 """

    queryset = GoodsCategory.objects.all()
    serializer_class = GoodsCategorySerializer
    # 如果类属性pagination_class设置为None。表示当前视图取消分页
    pagination_class = None

    def get_queryset(self):
        # parent_id中：[null]一级分类；[1-37]二级分类；[38-??]三级分类
        return self.queryset.filter(parent_id__gte=38)


class SPUSimpleView(ListAPIView):
    """ 获取spu表名称数据 """

    queryset = SPU.objects.all()
    serializer_class = SPUSimpleSerializer
    pagination_class = None


class SPUSpecView(ListAPIView):
    """ 获取SPU商品规格信息 """

    queryset = SPUSpecification.objects.all()
    serializer_class = SPUSpecificationSerializer
    pagination_class = None

    # 因为我们继承的是ListAPIView，在拓展类中是通过get_queryset获取数据，但是我们现在要获取的是规格信息，所以重写get_queryset
    def get_queryset(self):
        # 获取spu_id值
        pk = self.kwargs["pk"]  # self.kwargs.get("pk")
        return self.queryset.filter(spu_id=pk)

